package com.tecode.mapper;

import com.tecode.bean.Music;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Date;

public interface MusicMapper {

    int deleteByPrimaryKey(Integer musicid);

    int insert(Music record);

    int insertSelective(Music record);

    Music selectByPrimaryKey(Integer musicid);

    int updateByPrimaryKeySelective(Music record);

    int updateByPrimaryKey(Music record);

    /**
     * 保存上传的歌曲
     */
    int savaMusic(@Param("music")Music music);
    /**
     * 通过歌曲名模糊查询歌曲
     */
    List<Map> getSongListByMusicName(String musicName);

    /**
     * 歌曲的播放量增加
     */
    void addPlaybackVolume(Integer musicId);

    /**
     * 查找播放量前30的歌曲展示在用户的默认歌单
     */
    List<Map> selectDefaultSheet();

    /**
     * 通过userId查询用户的收藏歌单
     */
    List<Map> selectCollectionMusicByUserId(Integer userId);


    /**
     * 通过歌曲的种类ID查询不同种类的音乐集合
     */
    List<Map> selectMusicByCodeId(Integer codeId);

    /**
     * 查询每种音乐的类名及数量
     * @return
     */
    List<Object> selectMusicByCodeNumAndStyle();

    /**
     * 获取歌曲列表(默认创建时间排序)
     */
    List<Map> getList();

    /**
     * 统计歌曲总数
     */
    Integer countMusics();

    /**
     * 通过审核状态歌曲列表
     */
    List<Object> getAuditList(@Param("cid") int cid);

    /**
     * 统计各个审核状态歌曲
     */
    Integer countAudit(@Param("cid") int cid);

    /**
     * 审核歌曲
     */
    Integer audit(@Param("musicId") int musicId,
                  @Param("cid") int cid,
                  @Param("audittime") Date audittime,
                  @Param("auditorId") int auditorId);


    List<Map> selectMusicByMusicId(Integer musicId);

    /**
     * 通过歌曲ID查询驳回表中的歌曲
     */
    List<Object> getRejectMusicById(@Param("musicId") int musicId);

    /**
     * 通过歌曲ID删除驳回表中的歌曲
     */
    void delRejectMusicById(@Param("musicId") int musicId);

    /**
     * 搜索
     */
    List<Object> search(@Param("searchName") String searchName,
                        @Param("searchNickName") String searchNickName,
                        @Param("cid") Integer cid);

    /**
     * 搜索计数
     *
     */
    Integer countSearch(@Param("searchName") String searchName,
                        @Param("searchNickName") String searchNickName,
                        @Param("cid") Integer cid);

    /**
     * 通过ID查询歌曲详情
     */
    Map<String,Object>getInfo(@Param("musicId") int musicId,@Param("cid")int cid);

    /**
     * 通过ID查询未通过歌曲详情
     * @param musicId
     * @param cid
     * @return
     */
    Map<String,Object>getRejectionInfo(@Param("musicId") int musicId,@Param("cid")int cid);




    List getSongSheetSongsBySongSheetId(@Param("songSheetId") Integer songSheetId,@Param("page") Integer page);

    List<Map> getMusicsByUserId(Integer userId);
}